package misListasDobles;

public class ListasDobles {
	
	private NodeDoble inicio;
	
	public ListasDobles(){
		
		inicio = null;
	}
	
	public NodeDoble getInicio(){
		
		return inicio;
	}
	
	public void setInicio(NodeDoble valor){
		
		inicio = valor;
		
	}
	
	public boolean listaVacia(){
		
		return (inicio == null);  
	}
	
	public void agregarInicio(String valor){
		NodeDoble nodeNew = new NodeDoble(valor, inicio, null);
		
		if(! listaVacia())
		{
			inicio.setBack(nodeNew);
		}
		
		setInicio(nodeNew);
		
		
	}
	
	public void agregarFinal(String valor){
		
		NodeDoble NodePtr;
		NodeDoble nodoNew;
		
		if(size()==0) agregarInicio(valor);
		{
			NodePtr=inicio;
			
			while(NodePtr.getNext() !=null)
			{
				NodePtr=NodePtr.getNext();
			}
			
			nodoNew = new NodeDoble(valor,null,NodePtr);
			NodePtr.setNext(nodoNew);
		}
		
		
	}
	
	public String borrarInicio(){
		
		String valor = "";
		if(size()==0) valor = "LISTA VACIA";
		else
			if(size()==1){
				valor=inicio.getData();
				inicio=null;
			}
			else{
				valor= inicio.getData();
				inicio.getNext().setBack(null);
				inicio=inicio.getNext();
			}
		
		return valor;
	}
	
	public String borrarFinal(){
		
		NodeDoble NodePtr;
		String valor;
		
		if(size() == 0) valor = "LISTA VACIA";
		else
			if(size() == 1){
				
				valor = inicio.getData();
				inicio = null;
				
			}
			else{
				
				NodePtr = inicio;
				while(NodePtr.getNext().getNext() != null){
					
					NodePtr = NodePtr.getNext();
					
				}
				
			
		
			valor = NodePtr.getNext().getData();
			NodePtr.setNext(null);
			}
		
		return valor;
		
	}
	
	public int size(){
		
		int total = 0;
		NodeDoble NodePtr;
		
		NodePtr=inicio;
		while(NodePtr!=null){
			
			NodePtr = NodePtr.getNext();
			total++;
		}
		
		return total;
	}
	
	public String toString(){
	  
	  NodeDoble NodePtr;
	  String Lista;
	  
	  NodePtr = inicio;
	  Lista = "";
	  
	  while (NodePtr != null){
		  
		  Lista += NodePtr.getData() + "->";
		  NodePtr = NodePtr.getNext();
		  
	  }
	  
	  Lista += "NULL";
	  
	  return Lista;
	}
}